package developer.算法.哈希.最长连续序列;

import java.util.HashSet;
import java.util.Set;

/**
 * @author zhangyongkang
 * @time 2024/6/4 09:59
 * @description
 */
public class Solution_other {
    class Solution {
        public int longestConsecutive(int[] nums) {
            Set<Integer> num_set = new HashSet<>();
            for (int num : nums) {
                num_set.add(num);
            }

            int longestStreak = 0;

            for (int num : num_set) {
                //题解的精髓～
                // 如果有比当前数字小于1的数  那么就跳过 ！说明他不是  排序的首位
                //因为这个if的存在 所以这个时间复杂度实际是 O(n)
                if (!num_set.contains(num - 1)) {
                    int currentNum = num;
                    int currentStreak = 1;

                    while (num_set.contains(currentNum + 1)) {
                        currentNum += 1;
                        currentStreak += 1;
                    }

                    longestStreak = Math.max(longestStreak, currentStreak);
                }
            }

            return longestStreak;
        }
    }
}
